#ifndef GAME_H
#define GAME_H

#include <Windows.h>
#include <sqlite3.h>
#include "Graphics.h"
#include "Character.h"
#include "Constants.h"
#include "Input.h"
#include "Camera.h"
#include "MenuManager.h"
#include "Cursor.h"
#include "MapTile.h"

class Game {
public:
	enum GameState {
		Paused,
		ShowingMenu,
		Playing,
		Exiting
	};

	static int Start(HINSTANCE &hInstance);
	static void UpdatePlayerActions();
	static GameState GetGamestate();

	static Graphics* GraphicsPtr;
	static Input* InputPtr;
	static vector<Character*> CharactersPtrs;
	static vector<int> freeCharacterSlot;
	static vector<MapTile*> MapTilePtrs;
	static vector<MapTile*> DecorativeMapTilePtrs;
	static Camera* CameraPtr;
	static MenuManager* MenuManagerPtr;
	static Cursor* CursorPtr;

	static HWND window;

private:

	static void GameLoop();
	static void LoadLevel(int levelID = 0);
	static void LoadMap(int levelID = 0);
	static int AddCharacter(Character* Character);
	static void Shutdown();
	static void ClearCharacters();

	static WNDCLASSEX wndClass;
	static int playerCharacterId;
	static GameState gameState;
};

#endif